/**
 * 系统菜单实体定义
 * @description 定义系统菜单的数据结构和属性
 */
export interface SysMenu extends Record<string, unknown> {
  /** 菜单ID */
  id: number;
  /** 菜单名 */
  name: string;
  /** 类型: 1目录 2菜单 3按钮 */
  type: number;
  /** 父菜单id */
  parent_id: number;
  /** 跳转地址 */
  path: string;
  /** 组件地址 */
  component: string;
  /** 权限唯一标识 */
  permission: string;
  /** 是否外链: 0普通路由 1外链 */
  is_frame: number;
  /** 是否缓存组件: 0不缓存 1缓存 */
  is_cache: number;
  /** 是否全屏组件: 1是 0否 */
  full_page: number;
  /** 导航面包屑: 0不显示 1显示 2固定 */
  tag_bread: number;
  /** 是否隐藏: 0显示 1隐藏 */
  visible: number;
  /** 状态: 0正常 1停用 */
  status: number;
  /** 菜单icon */
  icon: string;
  /** 备注 */
  remark: string;
  /** 排序 */
  order: number;
  /** 创建时间 */
  time: number;
  /** 更新时间 */
  update_time: number;
  /** 是否删除 (0:未删除 1:已删除) */
  disabled: number;
}

/**
 * 创建菜单时的数据类型
 * @description 排除id字段的菜单数据
 */
export type CreateSysMenuDto = Omit<SysMenu, 'id'>;

/**
 * 更新菜单时的数据类型
 * @description 排除id和time字段的部分菜单数据
 */
export type UpdateSysMenuDto = Partial<Omit<SysMenu, 'id' | 'time'>>;

/**
 * 菜单查询时的数据类型
 * @description 用于查询菜单的条件参数
 */
export type SysMenuQueryDto = Partial<
  Pick<SysMenu, 'name' | 'type' | 'parent_id' | 'status' | 'visible' | 'disabled'>
>;
